using System;
using System.Collections;
using System.Collections.Generic;

namespace Me.Prettyprint.Hector.Api.Ddl
{
    /// <summary>
    /// Hector's implementation independent CfDef version.
    /// </summary>
	public interface ColumnFamilyDefinition
	{
		string KeyspaceName
		{
			get;
			set;
		}
		string Name
		{
			get;
			set;
		}
		ColumnType ColumnType
		{
			get;
			set;
		}
        /// <summary>
        /// Comparator type is the Column name
        /// </summary>
		ComparatorType ComparatorType
		{
			get;
			set;
		}
		ComparatorType SubComparatorType
		{
			get;
			set;
		}
		string ComparatorTypeAlias
		{
			get;
			set;
		}
		string SubComparatorTypeAlias
		{
			get;
			set;
		}
		string Comment
		{
			get;
			set;
		}
		double RowCacheSize
		{
			get;
			set;
		}
		int RowCacheSavePeriodInSeconds
		{
			get;
			set;
		}
		int KeyCacheSavePeriodInSeconds
		{
			get;
			set;
		}
		double KeyCacheSize
		{
			get;
			set;
		}
        /// <summary>
        /// Key validation class defines the validation type for the row KEY
        /// </summary>
		string KeyValidationClass
		{
			get;
			set;
		}
		string KeyValidationAlias
		{
			get;
			set;
		}
		double ReadRepairChance
		{
			get;
			set;
		}
        int GcGraceSeconds
        {
            get;
            set;
        }
        /// <summary>
        /// Defines the default data type validation for column values
        /// </summary>
        string DefaultValidationClass
        {
            get;
            set;
        }
        int Id
        {
            get;
            set;
        }
        int MaxCompactionThreshold
        {
            get;
            set;
        }
        int MinCompactionThreshold
        {
            get;
            set;
        }
        double MemtableOperationsInMillions
        {
            get;
            set;
        }
        int MemtableThroughputInMb
        {
            get;
            set;
        }
        int MemtableFlushAfterMins
        {
            get;
            set;
        }
        bool ReplicateOnWrite
        {
            get;
            set;
        }
        string CompactionStrategy
        {
            get;
            set;
        }
        Dictionary<string, string> CompactionStrategyOptions
        {
            get;
            set;
        }
        Dictionary<string, string> CompressionOptions
        {
            get;
            set;
        }
        double MergeShardsChance
        {
            get;
            set;
        }
        string RowCacheProvider
        {
            get;
            set;
        }
        byte[] KeyAlias
        {
            get;
            set;
        }
        int RowCacheKeysToSave
        {
            get;
            set;
        }
        List<ColumnDefinition> ColumnMetadata
        {
            get;
            set;
        }
	}
}